local currentPlayer = UnitName( "player" )
local itemInfo = {}
local SILVER = "|cffc7c7cf%s|r"
local TEAL = "|cff00ff9a%s|r"
local function CountsToInfoString( invCount, bankCount, equipCount )
    local info
    local total = invCount + bankCount + equipCount
    if invCount > 0 then
        info = BAGNON_NUM_BAGS:format( invCount )
    end
    if bankCount > 0 then
        local count = BAGNON_NUM_BANK:format( bankCount )
        if info then
            info = strjoin( ", ", info, count )
        else
            info = count
        end
    end
    if equipCount > 0 then
        if info then
            info = strjoin( ", ", info, BAGNON_EQUIPPED )
        else
            info = BAGNON_EQUIPPED
        end
    end
    if info then
        if total and not ( total == invCount or total == bankCount or total == equipCount ) then
            local totalStr = format( TEAL, total )
            return totalStr .. format( SILVER, format( " (%s)", info ) )
        end
        return format( TEAL, info )
    end
end

do
    for player in BagnonDB:GetPlayers() do
        if player ~= currentPlayer then
            itemInfo[player] = setmetatable( {}, { __index = function ( self, link )
    local invCount = BagnonDB:GetItemCount( link, KEYRING_CONTAINER, player )
    for bag = 0, NUM_BAG_SLOTS do
        invCount = invCount + BagnonDB:GetItemCount( link, bag, player )
    end
    local bankCount = BagnonDB:GetItemCount( link, BANK_CONTAINER, player )
    for i = 1, NUM_BANKBAGSLOTS do
        bankCount = bankCount + BagnonDB:GetItemCount( link, NUM_BAG_SLOTS + i, player )
    end
    local equipCount = BagnonDB:GetItemCount( link, "e", player )
    self[link] = CountsToInfoString( invCount or 0, bankCount or 0, equipCount or 0 ) or ""
    return self[link]
end } )
        end
    end
end
local function AddOwners( frame, link )
    for player in BagnonDB:GetPlayers() do
        local infoString
        if player == currentPlayer then
            local invCount = BagnonDB:GetItemCount( link, KEYRING_CONTAINER, player )
            for bag = 0, NUM_BAG_SLOTS do
                invCount = invCount + BagnonDB:GetItemCount( link, bag, player )
            end
            local bankCount = BagnonDB:GetItemCount( link, BANK_CONTAINER, player )
            for i = 1, NUM_BANKBAGSLOTS do
                bankCount = bankCount + BagnonDB:GetItemCount( link, NUM_BAG_SLOTS + i, player )
            end
            local equipCount = BagnonDB:GetItemCount( link, "e", player )
            infoString = CountsToInfoString( invCount or 0, bankCount or 0, equipCount or 0 )
        else
            infoString = itemInfo[player][link]
        end
        if infoString and infoString ~= "" then
            frame:AddDoubleLine( format( TEAL, player ), infoString )
        end
    end
    frame:Show()
end

local function HookTip( tooltip )
    tooltip:HookScript( "OnTooltipSetItem", function ( self, ... )
    local itemLink = select( 2, self:GetItem() )
    if itemLink and GetItemInfo( itemLink ) then
        AddOwners( self, itemLink )
    end
end )
end

HookTip( GameTooltip )
HookTip( ItemRefTooltip )
